/*
 * 该案例是使用两个进程分别调用第3章中的实例3.14和3.15对应的可执行文件来创建一个以当前时间为文件名的文件
 * 以及将一个与当前时间相关的字符串连续写入一个文件的实例
 *
 * 应用代码在父进程中创建了子进程1和子进程2，并且在子进程1中调用了exam314WriteTimeFun，
 * 在子进程2中调用了exam315timeopen
 * */

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

int main(void){
	
	pid_t pid1,pid2;
	pid_t child1, child2;
	// 使用fork函数创建子进程1
	pid1 = fork();

	if(pid1 < 0){
		printf("子进程1创建失败!\n");
		return -1;
	}else if(pid1 == 0){
	
		printf("此时为子进程1！\n");
		
		// 调用execlp函数执行exam314writetimeFun
		execlp("./../../exam03/exam314WriteTimetoFile/exam314WriteTimetoFileFun", "./../../exam03/exam314WriteTimetoFile/exam314WriteTimetoFileFun", (char *)0);

		exit(0);
	}else{
		printf("此时为父进程!\n");

		// 在父进程中创建子进程2
		pid2 = fork();

		if(pid2 < 0){
			printf("子进程2创建失败!\n");
			return -2;
		}else if(pid2 == 0){
			printf("此时为子进程2!\n");
			
			// 调用execlp函数执行exam315timeOpen函数
			execlp("./../../exam03/exam315*/exam315timeOpenFun", "./../../exam03/exam315*/exam315timeOpenFun", NULL);

			exit(0);
		}else{
			
			printf("调用waitpid函数等待子进程1退出!\n");
			// 调用waitpid函数等待子进程1退出
			child1 = waitpid(pid1, NULL, 0);
			if( child1  == pid1){
				printf("子进程1已经退出!\n");
			}

			printf("调用waitpid函数等待子进程2退出!\n");
			// 调用waitpid函数等待子进程2退出
			child2 = waitpid(pid2, NULL, 0);
			if( child2 == pid2 ){
				printf("子进程2已经退出!\n");
			}
		}
	}

	exit(0);
}
